﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>WinSet</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="../css/commands.css" rel="stylesheet" type="text/css">
<link href="../css/print.css" rel="stylesheet" type="text/css" media="print">
</head>
<body>

<h1>WinSet</h1>

<p>对匹配指定条件的窗口进行一系列的设置，例如设置“总在最前”，以及透明度等。</p>

<p class="CommandSyntax">
    WinSet, Attribute, Value [, WinTitle, WinText,  ExcludeTitle, ExcludeText]</p>
<h3>参数 </h3>
<table border="1" width="100%" cellspacing="0" cellpadding="3" bordercolor="#C0C0C0">
  <tr>
    <td width="15%">Attribute, Value</td>
    <td width="85%">查看下面的列表。</td>
  </tr>
  <tr>
    <td>WinTitle</td>
    <td>目标窗口的标题或标题中的部分文字（匹配模式由 <a href="SetTitleMatchMode.htm">SetTitleMatchMode</a> 决定）。如果省略后面 3 个参数，默认目标是 <a href="../LastFoundWindow.htm">上一次匹配的窗口</a> 。如果这个参数使用字母 A ，同时省略后面 3 个参数，则以当前激活的窗口作为目标。要用窗口的 class 名进行匹配，使用 <em>ahk_class 精确 class 名</em>（Window Spy 中可以显示 class 名）。要用窗口的 <a href="Process.htm">进程标识符（PID）</a>进行匹配，使用 <em>ahk_pid %PID变量%</em> 。要用 <a href="GroupAdd.htm">窗口组</a> ，使用 <em>ahk_group 组名</em> 。要用窗口的 <a href="WinGet.htm">唯一 ID</a> 进行匹配，使用 <em>ahk_id %ID变量%</em> 。要减小检测范围，使用 <a href="../LastFoundWindow.htm#multi">多重条件</a> ，例如：<em>My File.txt ahk_class Notepad</em></td>
  </tr>
  <tr>
    <td>WinText</td>
    <td>如果使用这个参数，则它应该是目标窗口中某个文本元素的子字符串（在 Window Spy 中会显示出窗口中的文本元素）。隐藏文本只有在 <a href="DetectHiddenText.htm">DetectHiddenText</a> 设置为 ON 的时候才能检测到。</td>
  </tr>
  <tr>
    <td>ExcludeTitle</td>
    <td>标题中包含该参数指定的文字的窗口将被除外。</td>
  </tr>
  <tr>
    <td>ExcludeText</td>
    <td>文本元素中包含该参数指定的文字的窗口将被除外。</td>
  </tr>
</table>

<h3>Attribute, Value</h3>
<p><strong><a name="AlwaysOnTop" id="AlwaysOnTop"></a>AlwaysOnTop</strong>, <strong>[On|Off|Toggle]</strong>：让一个窗口处于置顶状态。使用 ON 开启设置，使用 OFF 关闭设置，使用 TOOGLE 切换设置。如果省略，默认是 TOOGLE。也可以使用单词 Topmost 替换 AlwaysOnTop。</p>
<p><strong>Bottom</strong>：将一个窗口放到最底端，也就是所有窗口的下面。这个效果类似使用 Alt－Escape 快捷键。例如：WinSet, Bottom,, WinTitle</p>
<p><strong>Top</strong>：将一个窗口放到最前端而不进行 <a href="WinActivate.htm">激活</a> 。但是，大多数情况下系统都会自动激活它。另外，当系统禁止切换窗口焦点的时候该命令可能没有效果（这取决于当前窗口类型以及用户当前的操作）。要应付这种情况，可以让窗口暂时 <a href="#AlwaysOnTop">置顶</a> ，再取消置顶。</p>
<p><strong>Disable</strong> 或 <strong>Enable</strong>：停用或启用一个窗口。当一个窗口处于停用状态的时候，用户不能移动它或利用它的控件进行交互。另外，停用的窗口也不会出现在 alt-tab 列表中。</p>
<p><strong><a name="Redraw"></a>Redraw</strong>：通过通知系统某个窗口区域需要重绘，来刷新一个窗口的界面和内容。如果对某个窗口不起作用，尝试 <a href="WinMove.htm">WinMove</a> 。如果还不起作用，尝试：<br>
  <a href="WinHide.htm">WinHide</a>, WinTitle<br>
  <a href="WinShow.htm">WinShow</a>, WinTitle</p>
<p><strong><br>
Style,N </strong> <u>或</u> <strong>ExStyle,N</strong>：分别设置窗口的样式或扩展样式。如果 <strong>N</strong> 中的第一个字符是加号或减号，则窗口会增加或移除 <strong>N</strong> 中指定的样式（可同时指定多个样式，下同）；如果第一个字符是符号“`”，窗口将对 <strong>N</strong> 中指定的样式进行切换操作；如果第一个字符是数字，窗口原来的所有样式将被覆盖，彻底变成 <strong>N</strong> 中指定的样式。</p>
<p>如果样式设置失败，<a href="../misc/ErrorLevel.htm">ErrorLevel/错误等级</a> 设置为 1 ，成功为 0 。当没有匹配窗口或窗口不能应用指定的样式的时候（一般发生在 Windows 9x 中）会设置失败。</p>
<p>更改了一个窗口的样式之后，可能需要对窗口进行重绘，使用命令 <em>WinSet Redraw</em> （具体见下面）。最后，一些常用的样式代码可以参看 <a href="../misc/Styles.htm">样式列表</a> 。一些例子：</p>
<pre>WinSet, Style, -0xC00000, A  <em>; 移除当前激活窗口的标题栏（WS_CAPTION）。</em>
WinSet, ExStyle, ^0x80, WinTitle  <em>; 切换窗口的 WS_EX_TOOLWINDOW 属性，可以将窗口添加到/移除于 alt-tab 列表中。</em></pre>
<h3><a name="region"></a>WinSet, Region [, Options, WinTitle, ...]</h3>
<p>更改一个窗口的形状为指定的方形，椭圆形，或多边形。如果 <em>Options</em> 参数留空，窗口将恢复到原来的形状。否则，可以指定下面的一个或多个参数，用空格分隔：</p>
<p><strong>Wn</strong>：方形或椭圆形的宽度。例如：w200<br>
<strong>Hn</strong>：方形或椭圆形的高度。例如：h300<br>
<strong>X-Y</strong>：X轴 和 Y轴 坐标。例如，200-0 中的 200 表示 X轴 坐标，0 表示 Y轴 坐标。<br>
<strong>E</strong>：将窗口形状设置为椭圆形，而不是方形。这个参数只有在同时指定了 <strong>W</strong> 和 <strong>H</strong> 参数的时候才有效。<br>
<strong>R[w-h]</strong>：设置方形窗口的圆角。例如，R30-30 表示圆角大小为 30x30 。如果省略 <strong>w-h</strong> ，默认使用 30-30 。<strong>R</strong> 参数只有在同时指定了 <strong>W</strong> 和 <strong>H</strong> 参数的时候才有效。</p>
<p><strong>方形或椭圆形</strong>：如果同时指定了 <strong>W</strong> 和 <strong>H</strong> 参数，窗口的形状将变成方形，方形区域左上角的位置坐标为 <strong>X-Y</strong> 参数指定的坐标（以窗口左上角为原点）。但是，如果同时使用了 <strong>E</strong> 参数的话，窗口的形状将变成椭圆形。例如：WinSet, Region, 50-0 W200 H250 E, WinTitle</p>
<p><strong>多边形</strong>：如果同时指定了 <strong>W</strong> 和 <strong>H</strong> 参数，并且在 <strong>X-Y</strong> 参数中指定了多组坐标，窗口的形状将变成多边形（每组坐标以窗口左上角为原点）。例如，如果指定了 3 组坐标，大多数情况下窗口的形状会变成三角形，具体的形状取决于 3 组坐标的顺序。此外，在 <em>Options</em> 参数中也可以加上单词 <strong>Wind</strong> ，这将会使用一种弯曲的方式来决定多边形的形状。</p>
<p>如果形状设置失败，<a href="../misc/ErrorLevel.htm">ErrorLevel/错误等级</a> 设置为 1 ，成功为 0 。失败的原因有：1）没有匹配窗口；2）<em>Options</em> 中有一个或多个参数无效；3）指定了超过 2000 组坐标；4）指定的形状无效或不适用与目标窗口。</p>
<p>更多示例请查看本页最下方的示例代码。</p>
<h3><a name="trans"></a>WinSet, Transparent, N, WinTitle</h3>
<p>设置窗口为半透明状态。指定 <em>N</em> 为一个 0 到 255 的数字来表示透明度：0 表示完全透明，255 表示完全不透明。使用单词 OFF 彻底关闭窗口的透明效果。和设置透明度为 255 不同，使用 OFF 会提升系统性能并降低系统资源的占用。</p>
<p><a name="TransLimit"></a><strong>已知的关于透明度和 <a href="#TransColor">TransColor/透明色</a> 的限制：</strong></p>
<ul>
  <li>在 Windows 9x 和 NT4 上无效。</li>
  <li>对于没有标题栏并且没有 <a href="#AlwaysOnTop">总在最前</a> 属性的窗口无效。对于 <a href="Gui.htm">图形界面窗口</a>，可以在设置了窗口透明之后再移除标题栏。另外，下面的属性设置也可以让窗口设置透明度：<em><a href="Gui.htm#Options">Gui -Caption +ToolWindow</a>.</em></li>
  <li>设置透明度为 OFF 之前最好先设置透明度为 255 ，这样可以避免窗口的重绘问题，例如背景变黑。如果窗口仍然不能正确的重绘，参看下面有关 <a href="#Redraw">Redraw/重绘</a> 的说明。</li>
  <li>要更改窗口当前的 <a href="#TransColor">TransColor/透明色</a> ，最好先关闭窗口透明。</li>
</ul>
<p><strong>小贴士</strong>：要设置任务栏的透明度，使用 <em>WinSet, Transparent, 150, ahk_class Shell_TrayWnd</em> 。类似的，要设置开始菜单的透明度，参照这个例子：</p>
<pre>DetectHiddenWindows, on
WinSet, Transparent, 150, ahk_class BaseBar  <em>; 要让开始菜单的子菜单也透明，继续加入下面的代码。</em></pre>
<p>要让当前选择的菜单或系统所有的菜单透明，运行下面这个脚本。注意虽然这个脚本不能让它自己的菜单透明，但是可以让其它脚本的菜单透明：</p>
<pre>#Persistent
SetTimer, WatchForMenu, 5
return  <em>; 结束自动运行区域。</em>

WatchForMenu:
DetectHiddenWindows, on  <em>; 以立即检测到菜单。</em>
IfWinExist, ahk_class #32768
    WinSet, Transparent, 150  <em>; 使用上一行找到的窗口。</em>
return</pre>
<h3><a name="TransColor"></a>WinSet, TransColor, Color [N], WinTitle</h3>
<p>让目标窗口中所有符合指定颜色的区域完全透明（在 Windows 9x 和 NT4 中无效）。如果用户点击窗口中的透明部分，点击事件会“穿透”该窗口传递给下面的窗口。<em>Color</em> 参数可以是一个颜色名称或一个 RGB 值（关于颜色详细请参看 <a href="Progress.htm#colors">颜色图表</a> ，或者使用 <a href="PixelGetColor.htm">PixelGetColor</a> 的 RGB 模式）。要让目标窗口中符合指定颜色的区域半透明，在颜色参数之后添加一个表示透明度的数字（0 - 255）。例如：<em>WinSet, TransColor, EEAA99 150, WinTitle</em></p>
<p>TransColor/透明色 常被用来制作屏幕菜单（OSD）或窗口特效。有一个关于屏幕菜单的例子在 <a href="Gui.htm#OSD">Gui 命令帮助页的最下面</a> 。</p>
<p>单词 OFF 用来完全关闭窗口的透明设置。下面两个脚本的功能是一样的：<br>
WinSet, Transparent, Off, WinTitle<br>
WinSet, TransColor, Off, WinTitle</p>
<p>已知的限制：参看 <a href="#TransLimit">上面的列表</a> 。</p>
<h3>注意</h3>
<p>除了上面明确说明的地方外，<a href="../misc/ErrorLevel.htm">ErrorLevel/错误等级</a> 不会被该命令修改。</p>
<p>虽然 Windows 2000/XP 及之后的系统都支持设置透明，但是只有 XP 之后的系统才能获取到窗口的透明度设置（通过 <a href="WinGet.htm">WinGet</a> 命令）。</p>
<p>可以用下面的脚本取消一个脚本的 <a href="SplashTextOn.htm">SplashText</a> 窗口的置顶状态：<br>
  WinSet, AlwaysOnTop, Off, My Splash Window Title</p>
<p>窗口的标题和窗口中的文字是大小写敏感的。要检测隐藏窗口，必须打开 <a href="DetectHiddenWindows.htm">DetectHiddenWindows</a> 。</p>

<h3>相关命令</h3>
<p><a href="WinGet.htm">WinGet</a>, <a href="WinHide.htm">WinHide</a>, <a href="WinSetTitle.htm">WinSetTitle</a>, <a href="WinMove.htm">WinMove</a>, <a href="WinActivate.htm">WinActivate</a>, <a href="Control.htm">Control</a></p>
<h3>示例</h3>
<pre class="NoIndent">WinSet, Transparent, 200, Untitled - Notepad <em>; 让窗口稍微有点透明效果</em>
WinSet, TransColor, White, Untitled - Notepad <em>; 让窗口中白色的部分透明</em>
WinSet, AlwaysOnTop, toggle, Calculator <em>; 切换计算器的“总在最前”状态</em>

<em>; 长一点的例子：</em>
<em>; 这里有一些快捷键用来演示“Transparent/透明度”和“TransColor/透明色”的效果</em>
<em>; 注意：如果你按下快捷键的时候鼠标正指在 TransColor/透明色</em>
<em>; 设置的窗口透明部分上，则快捷键影响的就是透明窗口下方的窗口。</em>
<em>; 同样，快捷键 Win + G 只有在 Windows XP 上才有效果，</em>
<em>; 因为 Windows 2000 不能获取窗口的透明设置</em>

#t::  <em>; 快捷键 Win+T 让窗口中符合鼠标所指颜色的部分透明</em>
MouseGetPos, MouseX, MouseY, MouseWin
PixelGetColor, MouseRGB, %MouseX%, %MouseY%, RGB
<em>; 设置新的透明效果之前需要关闭窗口当前的透明效果</em>
WinSet, TransColor, Off, ahk_id %MouseWin%
WinSet, TransColor, %MouseRGB% 220, ahk_id %MouseWin%
return

#o::  <em>; 快捷键 Win+O 关闭鼠标所指窗口的透明效果</em>
MouseGetPos,,, MouseWin
WinSet, TransColor, Off, ahk_id %MouseWin%
return

#g::  <em>; 快捷键  Win+G 显示鼠标所指窗口当前的透明效果设置</em>
MouseGetPos,,, MouseWin
WinGet, Transparent, Transparent, ahk_id %MouseWin%
WinGet, TransColor, TransColor, ahk_id %MouseWin%
ToolTip Translucency:`t%Transparent%`nTransColor:`t%TransColor%
return

<em>; “WinSet Region”的例子</em>
WinSet, Region, 50-0 W200 H250, WinTitle  <em>; 让窗口只显示指定的方形部分</em>
WinSet, Region, 50-0 W200 H250 R40-40, WinTitle  <em>; 和上面的一样，不过有 40 x 40 的圆角。</em>
WinSet, Region, 50-0 W200 H250 E, WinTitle  <em>; 椭圆形窗口</em>
WinSet, Region, 50-0 250-0 150-250, WinTitle  <em>; 倒三角形窗口</em>
WinSet, Region,, WinTitle <em>; 将窗口恢复原状</em>

<em>; 更加复杂的 Region 例子，在窗口中创建了一个方形的“洞”。</em>
<em>; 这里指定了 2 个方形，一个内部的一个外部的。每个方形使用 5 组坐标</em>
WinSet, Region, 0-0 300-0 300-300 0-300 0-0   100-100 200-100 200-200 100-200 100-100, WinTitle</pre>

</body>
</html>
